namespace OhioState.Graphics
{
    /// <summary>
    /// Represents a material. Materials are used to specify
    /// how <see cref="IDrawable"/>s are rendered.
    /// </summary>
    public interface IMaterial
    {
        /// <summary>
        /// Get or set the compositor for the material.
        /// </summary>
        IRasterOps Compositor { get;  set; }

        /// <summary>
        /// Get or set material's shader.
        /// </summary>
        IShaderProgram Shader { get; set; }

        /// <summary>
        /// Get or set front material color.
        /// </summary>
        MaterialColors FrontMaterial { get;  set; }

        /// <summary>
        /// Get or set back material color.
        /// </summary>
        MaterialColors BackMaterial { get;  set; }

        /// <summary>
        /// Get or set current color.
        /// </summary>
        OSUColor CurrentColor { get;  set; }
        //IList<ITexture> TextureBinding { get; set; }

        /// <summary>
        /// Activate the material.
        /// </summary>
        /// <param name="panel">Render panel to which the material is rendered.</param>
        void MakeActive(IRenderPanel panel);

        /// <summary>
        /// Deactivate the material.
        /// </summary>
        /// <param name="panel">Render panel to which the material is rendered.</param>
        void Deactivate(IRenderPanel panel);
    }
}
